/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Codigo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author kyerte
 */
public class ConsultaCliente {

    private Connection conexion = null;
    private PreparedStatement consultarTodosLosClientes = null;
    private PreparedStatement insertarNuevoCliente = null;
    private PreparedStatement actualizarCliente = null;
    private PreparedStatement eliminarCliente = null;
    private PreparedStatement obtenerIdCliente = null;
    private PreparedStatement obtenerClienteNombre = null;
    private PreparedStatement obtenerClienteCelular = null;
    private PreparedStatement obtenerClienteEMail = null;

    ConsultaCliente() {
        try {
            conexion = FrmPrincipal.conexion;
            consultarTodosLosClientes = conexion.prepareStatement("SELECT * FROM Clientes");
            insertarNuevoCliente = conexion.prepareStatement("INSERT INTO "
                    + "Clientes(Nombre, Calle, Colonia, FechaNacimiento, Soltero,"
                    + "TelCasa, TelCelular, TelTrabajo, EMail, CURP, Estatus, "
                    + "LugarTrabajo) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)");
            actualizarCliente = conexion.prepareStatement("UPDATE Clientes "
                    + "SET Nombre=?, Calle=?, Colonia=?, FechaNacimiento=?, Soltero=?, "
                    + "TelCasa=?, TelCelular=?, TelTrabajo=?, EMail=?, CURP=?, "
                    + "Estatus=?, LugarTrabajo=? WHERE idCliente=?");
            eliminarCliente = conexion.prepareStatement("DELETE FROM Clientes WHERE "
                    + "idCliente=?");
            obtenerIdCliente = conexion.prepareStatement("SELECT idCliente FROM "
                    + "Clientes WHERE Nombre=?");
            obtenerClienteNombre = conexion.prepareStatement("SELECT * FROM Clientes"
                    + " WHERE Nombre LIKE(?)");
            obtenerClienteCelular = conexion.prepareStatement("SELECT * FROM Clientes"
                    + " WHERE TelCelular LIKE(?)");
            obtenerClienteEMail = conexion.prepareStatement("SELECT * FROM Clientes"
                    + " WHERE EMail LIKE(?)");

        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
    }

    public int agregarNuevoCliente(String nombre, String calle, String colonia,
            java.sql.Date FechaNacimiento, String edoCivil, String telCasa, String telCelular,
            String telTrabajo, String correo, String curp, String estatus, String lugarTrabajo, boolean fallo) {

        int resultado = 0;

        try {
            insertarNuevoCliente.setString(1, nombre);
            insertarNuevoCliente.setString(2, calle);
            insertarNuevoCliente.setString(3, colonia);
            if (fallo) {
                insertarNuevoCliente.setNull(4, java.sql.Types.DATE);

            } else {
                insertarNuevoCliente.setDate(4, FechaNacimiento);

            }
            insertarNuevoCliente.setString(5, edoCivil);
            insertarNuevoCliente.setString(6, telCasa);
            insertarNuevoCliente.setString(7, telCelular);
            insertarNuevoCliente.setString(8, telTrabajo);
            insertarNuevoCliente.setString(9, correo);
            insertarNuevoCliente.setString(10, curp);
            insertarNuevoCliente.setString(11, estatus);
            insertarNuevoCliente.setString(12, lugarTrabajo);

            resultado = insertarNuevoCliente.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return resultado;
    }

    public int actualizarCliente(String nombre, String calle, String colonia,
            java.sql.Date FechaNacimiento, String edoCivil, String telCasa, String telCelular,
            String telTrabajo, String correo, String curp, String estatus, String lugarTrabajo,
            int idCliente, boolean fallo) {

        int resultado = 0;

        try {
            actualizarCliente.setString(1, nombre);
            actualizarCliente.setString(2, calle);
            actualizarCliente.setString(3, colonia);
            if (fallo) {
                actualizarCliente.setNull(4, java.sql.Types.DATE);

            } else {
                actualizarCliente.setDate(4, FechaNacimiento);

            }
            actualizarCliente.setString(5, edoCivil);
            actualizarCliente.setString(6, telCasa);
            actualizarCliente.setString(7, telCelular);
            actualizarCliente.setString(8, telTrabajo);
            actualizarCliente.setString(9, correo);
            actualizarCliente.setString(10, curp);
            actualizarCliente.setString(11, estatus);
            actualizarCliente.setString(12, lugarTrabajo);
            actualizarCliente.setInt(13, idCliente);

            resultado = actualizarCliente.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return resultado;
    }

    public int obtenerIdCliente(String nombre) {
        int idCliente = 0;
        ResultSet conjuntoResultados = null;
        try {

            obtenerIdCliente.setString(1, nombre);
            conjuntoResultados = obtenerIdCliente.executeQuery();
            while (conjuntoResultados.next()) {
                idCliente = conjuntoResultados.getInt("idCliente");
            }
        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {
            try {
                conjuntoResultados.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return idCliente;
    }

    public int eliminarCliente(int id) {
        int resultado = 0;
        try {
            eliminarCliente.setInt(1, id);
            resultado = eliminarCliente.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return resultado;
    }

    public List<Cliente> obtenerTodosLosClientes() {

        List<Cliente> resultados = null;
        ResultSet conjuntoResultados = null;

        try {

            conjuntoResultados = consultarTodosLosClientes.executeQuery();
            resultados = new ArrayList<Cliente>();

            while (conjuntoResultados.next()) {

                resultados.add(new Cliente(conjuntoResultados.getInt("idCliente"),
                        conjuntoResultados.getString("Nombre"),
                        conjuntoResultados.getString("Calle"),
                        conjuntoResultados.getString("Colonia"),
                        conjuntoResultados.getDate("FechaNacimiento"),
                        conjuntoResultados.getString("Soltero"),
                        conjuntoResultados.getString("TelCasa"),
                        conjuntoResultados.getString("TelCelular"),
                        conjuntoResultados.getString("TelTrabajo"),
                        conjuntoResultados.getString("EMail"),
                        conjuntoResultados.getString("CURP"),
                        conjuntoResultados.getString("Estatus"),
                        conjuntoResultados.getString("LugarTrabajo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultados;
    }

    public int obtenerIdUltimoRegistro() {
        int ultimoId = 0;
        ResultSet conjuntoResultados = null;
        try {
            Statement instruccion = conexion.createStatement();
            conjuntoResultados = instruccion.executeQuery("SELECT MAX(idCliente) "
                    + "AS id FROM Clientes");

            while (conjuntoResultados.next()) {
                ultimoId = conjuntoResultados.getInt("id");
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
            close();

        }

        return ultimoId;
    }

    public List<Cliente> obtenerClienteNombre(String nombre) {
        List<Cliente> resultados = null;
        ResultSet conjuntoResultados = null;

        try {

            obtenerClienteNombre.setString(1, nombre);
            conjuntoResultados = obtenerClienteNombre.executeQuery();
            resultados = new ArrayList<Cliente>();

            while (conjuntoResultados.next()) {

                resultados.add(new Cliente(conjuntoResultados.getInt("idCliente"),
                        conjuntoResultados.getString("Nombre"),
                        conjuntoResultados.getString("Calle"),
                        conjuntoResultados.getString("Colonia"),
                        conjuntoResultados.getDate("FechaNacimiento"),
                        conjuntoResultados.getString("Soltero"),
                        conjuntoResultados.getString("TelCasa"),
                        conjuntoResultados.getString("TelCelular"),
                        conjuntoResultados.getString("TelTrabajo"),
                        conjuntoResultados.getString("EMail"),
                        conjuntoResultados.getString("CURP"),
                        conjuntoResultados.getString("Estatus"),
                        conjuntoResultados.getString("LugarTrabajo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultados;
    }

    public List<Cliente> obtenerClienteCelular(String telCelular) {
        List<Cliente> resultados = null;
        ResultSet conjuntoResultados = null;

        try {

            obtenerClienteCelular.setString(1, telCelular);
            conjuntoResultados = obtenerClienteCelular.executeQuery();
            resultados = new ArrayList<Cliente>();

            while (conjuntoResultados.next()) {

                resultados.add(new Cliente(conjuntoResultados.getInt("idCliente"),
                        conjuntoResultados.getString("Nombre"),
                        conjuntoResultados.getString("Calle"),
                        conjuntoResultados.getString("Colonia"),
                        conjuntoResultados.getDate("FechaNacimiento"),
                        conjuntoResultados.getString("Soltero"),
                        conjuntoResultados.getString("TelCasa"),
                        conjuntoResultados.getString("TelCelular"),
                        conjuntoResultados.getString("TelTrabajo"),
                        conjuntoResultados.getString("EMail"),
                        conjuntoResultados.getString("CURP"),
                        conjuntoResultados.getString("Estatus"),
                        conjuntoResultados.getString("LugarTrabajo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultados;
    }

    public List<Cliente> obtenerClienteEMail(String correo) {
        List<Cliente> resultados = null;
        ResultSet conjuntoResultados = null;

        try {

            obtenerClienteEMail.setString(1, correo);
            conjuntoResultados = obtenerClienteEMail.executeQuery();
            resultados = new ArrayList<Cliente>();

            while (conjuntoResultados.next()) {

                resultados.add(new Cliente(conjuntoResultados.getInt("idCliente"),
                        conjuntoResultados.getString("Nombre"),
                        conjuntoResultados.getString("Calle"),
                        conjuntoResultados.getString("Colonia"),
                        conjuntoResultados.getDate("FechaNacimiento"),
                        conjuntoResultados.getString("Soltero"),
                        conjuntoResultados.getString("TelCasa"),
                        conjuntoResultados.getString("TelCelular"),
                        conjuntoResultados.getString("TelTrabajo"),
                        conjuntoResultados.getString("EMail"),
                        conjuntoResultados.getString("CURP"),
                        conjuntoResultados.getString("Estatus"),
                        conjuntoResultados.getString("LugarTrabajo")));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultados;
    }

    private void close() {
        try {
            conexion.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}
